package powerup;

import java.awt.event.KeyEvent;
import javax.swing.JLabel;
import nivel.Casillero;
import nivel.Nivel;
import logica.EntidadConLogica;

/**
 * Clase que modela una BolaDeFuego
 * 
 * @author Agustin Orge (LU.85538)
 * @author Victoria Martinez de la Cruz (LU.87620)
 */
public class BolaDeFuego implements EntidadConLogica {

	/**
	 * Atributos de instancia
	 */
	private Nivel nivel;
	private Casillero casilleroActual;
	private char rumbo;
	private JLabel label;

	/**
	 * Constructor de una Bola de Fuego
	 * 
	 * @param n
	 *            nivel con el cual Bola de Fuego esta en relacion
	 * @param ca
	 *            casillero actual
	 */
	public BolaDeFuego(Nivel n, Casillero ca) {
		nivel = n;
		casilleroActual = ca;
		rumbo = rumboMario();
		label = new JLabel(nivel.getGrafica().getPanelEntidades().getIconos()
				.getBolaDeFuego());
		label.setSize(8, 8);
		label.setLocation(casilleroActual.getX(), casilleroActual.getY());
	}

	// Consulta privada para determinar el rumbo de Mario, y asi, la direccion
	// que tomara la bola
	private char rumboMario() {
		int code = nivel.getMario().getManejo().getLastKey();

		if (code == KeyEvent.VK_LEFT) {
			return 'i';
		} else {
			return 'd';
		}
	}

	/**
	 * Retorna el nivel con el cual se encuentra asociada
	 * 
	 * @return nivel
	 */
	@Override
	public Nivel getNivel() {
		return nivel;
	}

	/**
	 * Casillero actual de la bola de fuego
	 * 
	 * @return casilleroActual
	 */
	@Override
	public Casillero getCasilleroActual() {
		return casilleroActual;
	}

	/**
	 * Retorna la etiqueta asociada
	 * 
	 * @return label
	 */
	public JLabel getLabel() {
		return label;
	}

	/**
	 * Rumbo de la bola de fuego
	 * 
	 * @return rumbo
	 */
	public char getRumbo() {
		return rumbo;
	}

	// comandos

	/**
	 * Movimiento a derecha. Si el powerup choca con un obstaculo, deja de
	 * avanzar.
	 */
	public void moverDerecha() {
		if (nivel.getLogicaIA().moverDerecha(this)) {
			nivel.getMovimiento().moverDerecha(casilleroActual, label);

		}
	}

	/**
	 * Movimiento a izquierda. Si el powerup choca con un obstaculo, deja de
	 * avanzar.
	 */
	public void moverIzquierda() {
		if (nivel.getLogicaIA().moverIzquierda(this)) {
			nivel.getMovimiento().moverIzquierda(casilleroActual, label);

		}
	}

	// metodos propio de la interfaz EntidadConLogica
	// Bola de Fuego no lo utiliza
	@Override
	public boolean estaCayendo() {

		return false;
	}

	@Override
	public void setCayendo(boolean c) {

	}

}
